What's ORM
Introduction
Object-relational mapping (ORM, O/RM, and O/R mapping)
概述
在计算机学科中,他是用来在不兼容的系统类型(incompatible type systems)和面向对象的编程语言(object-oriented programming laguages)之间进行数据转化(converting data)的一种编程技术。
在面向对象的程序设计中,数据管理任务往往以对象实现,这些对象往往不是纯数字的值。
而常用的数据库只能以表的结构存储基本类型,例如:整形和字符串等。
所以,程序员要么把对象转换成一组基本类型的数据,以便数据库存储;要么在程序中就使用基本类型数据。ORM就是第一种实现方法。
核心问题是:将逻辑对象转换为可存储的原子形式,同时保护对象属性以及他们之间的关系,以便在需要时恢复成对象。 如果这种存储
和重组
功能实现的话,对象就可以说是能够被持久化
了
持久化
所谓持久化就是,你希望数据存活范围超过程序本身。对于java来说,就是数据存储于JVM以外,以便后溪重新获取这些数据。
关系型数据库
ORM主要面向的是关系型数据库(RDBMS),尽管在面向对象技术中,和关系数据库对应的是面向对象的数据库(object database:ODBMS)。但是在可预见的未来,关系数据库仍旧占据着一席之地。
Oject-Relational Impedance Mismatch
有时也称作paradigm mismatch。是对象模型和关系模型不能良好匹配的一种说法。RDBMS使用表结构表示数据,而像java这种面向对象语言使用对象及其关系进行表示。在关系数据库中存储和获取这些对象和它们的关系会遇到五个问题:(还没看懂,详情参考原文)
颗粒度(Granularity)
有时一个对象模型对应的类要比数据库中相应的表要多得多。
子类(Subtypes [inheritance])
在面向对象语言中很常见。但是RDBMS没有相应的支持。
Identity
RDBMS定义了千篇一律的的概念:主键。而java中既有唯一概念又有相等概念。
关联(Association)
面向对象语言中的关系并不直接。而RDBMS中直接使用外检进行说明。
数据导航(Data navigation)
在java中,可以根据对象关联根据一个对象找到另一个对象。而在数据库中,是使用尽量少的SQL语句和JOINs,然后从中获得所需对象。